
/*
 * @Descripttion: 默认配置
 * @version: 
 * @Author: turingchang
 * @Date: 2020-08-22 16:18:21
 * @LastEditors: turingchang
 * @LastEditTime: 2020-09-02 10:24:58
 */



const path = require('path');
const time =require('../app/common/utils/time');

module.exports = appInfo => {
  return {
    keys: "UserName=turing",
    view: {
      defaultViewEngine: 'nunjucks',
      mapping: {
        '.tpl': 'nunjucks',
      }
    },
    userLogger:{ //用户自定义log配置
      requestLogger:{ //自定义log名称
        level: 'info',//log等级.debug输出所有状态
        file:path.join(appInfo.root, `logs/sys/request/${time.moment().format('YYYY-MM')}/${time.moment().format('DD')}/${time.moment().format('HH')}.log`),//log json文件保存地址，便于上传log
      },
    },    
    logger: {
      level: 'DEBUG',
      //file:`${appInfo.root}/logs/ulog/${appInfo.name}/${appInfo.name}-web.log`,
      allowDebugAtProd: false, //生产环境也打印日志,调试环境则输出终端
      outputJSON: true,
    },
    // customLogger: {
    //   // requestLogger: { //this.app.getLogger('requestLogger').info(data);
    //   //   file: path.join(appInfo.root, 'logs/ulog/request/request.log'),
    //   //   level: 'DEBUG',
    //   //   allowDebugAtProd: false,
    //   //   outputJSON: true,
    //   // },
    // },
    jsonp: {
      callback: 'callback', // 识别 query 中的 `callback` 参数
      limit: 100, // 函数名最长为 100 个字符
    },
    sequelize: {
      dialect: 'mysql', // support: mysql, mariadb, postgres, mssql
      database: 'xapi', //数据库名
      host: '192.168.0.226',
      port: 9528,
      username: 'xapi',
      password: 'M5NhyxNxCTTcwC2r',
      // 是否自动进行下划线转换（这里是因为DB默认的命名规则是下划线方式，而我们使用的大多数是驼峰方式）
      underscored: true,
      // 时区，sequelize有很多自动时间的方法，都是和时区相关的，记得设置成东8区（+08:00）
      timezone: '+08:00',
      dialectOptions: {
        dateStrings: true,
        typeCast(field, next) {
          // for reading from database
          if (field.type === "DATETIME") {
            return field.string();
          }
          return next();
        }
      },
    },
    // 加载中间件
    middleware: ['configHandler','load','authHandler', 'xrpc', 'forbidIp', 'forbidRouter',  'errorHandler', ],
    configHandler: {
      //filter: [],//需要强制检查是否已设置的配置名称
      enable: true, 
    },
    load:{
      enable: true, 
    },
    errorHandler: {
      // 只对 /api 前缀的 url 路径生效
      // match: '/api',
      match: '',
      enable: true, //是否启用此插件
    },
    authHandler: {
      enable: false, //是否启用此插件
      allowed: [ //验证token时不需要鉴权的路由
        '/api/user/register',
        '/api/user/login'
      ],
    },
    xrpc: {
      enable: false, //是否启用此插件
    },
    forbidIp: {
      enable: true, //是否启用此插件
    },
    forbidRouter: {
      enable: true, //是否启用此插件
    },    
    jwt: {
      secret: 'turing', //加密密钥
      expiresIn: 60 * 60 * 2 // 2小时过期
    },
    security: { //安全组件，防http攻击
      xframe: {
        enable: false,
      },
      ipBlackList: [
        '',
      ],
      csrf: {
        enable: false, //只需将这个设为false则关闭安全验证，框架默认是开启的。 https://eggjs.org/zh-cn/core/security.html
        // type: 'ctoken',
        // ignoreJSON: false,
        // useSession: false,
        // cookieName: 'csrfToken',
        // sessionName: 'csrfToken',
        // headerName: 'x-csrf-token',
        // bodyName: '_csrf',
        // queryName: '_csrf',
        // refererWhiteList: [],
      },
    },
    console:{
      request:{
        style:`------------------------------------>>>>>>>>> ${appInfo.name} <<<<<<<<<------------------------------------ \n`,
      },      
    },
    

  };
}